package com.macro.mall.model.request;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.List;

/**
 * 担保支付订单新增/更新请求参数
 */
@Data
public class OrderUpsertRequest {
    // 外部订单ID（商户系统唯一标识）
    @JsonProperty("out_order_id")
    private String outOrderId;

    // 用户在小红书的openId，用于标识下单用户
    @JsonProperty("open_id")
    private String openId;

    // 小程序path路径，用于支付完成后跳转
    @JsonProperty("path")
    private String path;

    // 业务创建时间，Unix时间戳，单位毫秒
    @JsonProperty("biz_create_time")
    private Long bizCreateTime;

    // 业务更新时间，Unix时间戳，单位毫秒（可选）
    @JsonProperty("biz_update_time")
    private Long bizUpdateTime;

    // 订单过期时间，Unix时间戳，单位秒（可选）
    @JsonProperty("order_expired_time")
    private Long orderExpiredTime;

    // 商品信息列表，目前仅支持单商品下单
    @JsonProperty("product_infos")
    private List<ProductInfo> productInfos;

    // 订单价格汇总信息
    @JsonProperty("price_info")
    private PriceInfo priceInfo;

    /**
     * 商品信息实体类
     */
    @Data
    public static class ProductInfo {
        // 外部商品ID，商户系统中的商品唯一标识
        @JsonProperty("out_product_id")
        private String outProductId;

        // 外部SKU ID，商户系统中的SKU唯一标识
        @JsonProperty("out_sku_id")
        private String outSkuId;

        // 购买数量，必须大于0
        @JsonProperty("num")
        private Integer num;

        // 商品售卖价格，单位：分
        @JsonProperty("sale_price")
        private Long salePrice;

        // 商品实际价格，单位：分（sale_price - 所有discount_infos价格之和）
        @JsonProperty("real_price")
        private Long realPrice;

        // 商品图片URL（可选）
        @JsonProperty("image")
        private String image;

        // 折扣信息列表（可选）
        @JsonProperty("discount_infos")
        private List<DiscountInfo> discountInfos;
    }

    /**
     * 折扣信息实体类
     */
    @Data
    public static class DiscountInfo {
        // 折扣名称，如"会员折扣"、"促销优惠"等
        @JsonProperty("name")
        private String name;

        // 优惠金额，单位：分
        @JsonProperty("price")
        private Long price;

        // 优惠数量
        @JsonProperty("num")
        private Integer num;
    }

    /**
     * 价格信息实体类
     */
    @Data
    public static class PriceInfo {
        // 订单总金额，单位：分（所有商品real_price总和 + freight_price + 所有extra_price_infos价格之和）
        @JsonProperty("order_price")
        private Long orderPrice;

        // 运费，单位：分（可选）
        @JsonProperty("freight_price")
        private Long freightPrice;

        // 总优惠金额，单位：分（可选）
        @JsonProperty("discount_price")
        private Long discountPrice;

        // 附加费用列表，如包装费等（可选）
        @JsonProperty("extra_price_infos")
        private List<ExtraPriceInfo> extraPriceInfos;
    }

    /**
     * 附加费用信息实体类
     */
    @Data
    public static class ExtraPriceInfo {
        // 费用名称，如"包装费"、"服务费"等
        @JsonProperty("name")
        private String name;

        // 费用金额，单位：分
        @JsonProperty("price")
        private Long price;

        // 数量
        @JsonProperty("num")
        private Integer num;

        // 业务ID（可选），用于标识特定业务
        @JsonProperty("biz_id")
        private String bizId;

        // 业务类型（可选），附加费场景传固定值"INDEPENDENT"，可单独进行费用项退款
        @JsonProperty("biz_type")
        private String bizType;
    }
}
